home *** CD-ROM | disk | FTP | other *** search
-
- --NOTE: glasses must be together in models.lua
- --NOTE: last glass is the plate
- local glasses = {}
- for i = 0, 8 do
- glasses[i] = getModelsTable()[sklenka.index + i]
- end
-
- local function setViewShiftX(model, reference, shift_x)
- model_setViewShift(model.index,
- reference.X + shift_x - model.X, 0)
- end
-
- -- -----------------------------------------------------------------
- -- Init
- -- -----------------------------------------------------------------
- local function prog_init()
- initModels()
- sound_playMusic("music/rybky15.ogg")
- local pokus = getRestartCount()
- room.globpole = createArray(1024)
-
-
- -- -------------------------------------------------------------
- local function prog_init_room()
- local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
-
- room.uvod1 = 0
- room.uvod2 = 0
- room.nevylit = 0
- room.ovalci = 0
- if random(100) >= 130 - pokus * 30 then
- room.uvod1 = 2
- end
- if random(100) >= 130 - pokus * 30 then
- room.uvod2 = 2
- end
- if random(100) >= 120 - pokus * 20 then
- room.nevylit = 2
- end
- if random(100) >= 120 - pokus * 20 then
- room.ovalci = 2
- end
- if room.uvod2 == 0 then
- room.globpole[1] = 1
- room.globpole[2] = 1
- else
- room.globpole[1] = 0
- room.globpole[2] = 0
- end
- room.bojise = 0
-
- return function()
- if no_dialog() and isReady(small) and isReady(big) then
- pomb1 = false
- for pom1, glass in pairs(glasses) do
- if glass.dir == dir_left or glass.dir == dir_right then
- pomb1 = true
- end
- end
- pomb2 = false
- --NOTE: glass num.8(=plate) is not used here
- for pom1 = 0, 7 do
- local glass = glasses[pom1]
- if glass.Y == 27 and glass.X == 36 and ocel.X == 37 then
- pomb2 = true
- end
- end
- if room.uvod1 == 0 then
- addm(random(20) + 20, "pt1-m-parnicek")
- room.uvod1 = 1
- elseif room.uvod2 == 0 then
- addv(random(20) + 20, "pt1-v-predtucha")
- addm(0, "pt1-m-predtucha")
- planTimeAction(0, function() room.globpole[1] = 0 end)
- planTimeAction(0, function() room.globpole[2] = 0 end)
- room.uvod2 = 1
- elseif room.uvod2 == 1 and (room.globpole[1] ~= 0 or room.globpole[2] ~= 0) then
- room.uvod2 = 2
- addm(10 + random(10), "pt1-m-kostlivec")
- elseif room.bojise == 0 and room.uvod2 == 2 and (room.globpole[1] ~= 0 or room.globpole[2] ~= 0) and random(1000) < 3 then
- room.bojise = 1
- addm(20, "pt1-m-vylezt"..random(3))
- addv(random(10) + 5, "pt1-v-pryc"..random(2))
- elseif room.ovalci == 0 and pomb2 then
- room.ovalci = 1
- addv(3, "pt1-v-valec")
- addm(random(5), "pt1-m-nemuzu")
- elseif room.nevylit == 0 and pomb1 and random(100) < 1 then
- room.nevylit = 1
- addv(0, "pt1-v-pozor")
- end
- end
- end
- end
-
- -- -------------------------------------------------------------
- local function prog_init_frkavec()
- local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
-
- frkavec.cinnost = 0
- frkavec:setEffect("invisible")
-
- return function()
- switch(frkavec.okno){
- [1] = function()
- setViewShiftX(frkavec, kabina, 2)
- end,
- [2] = function()
- setViewShiftX(frkavec, kabina, 8)
- end,
- }
- if frkavec.cinnost > 0 then
- if frkavec.strana == 1 then
- frkavec:setEffect("reverse")
- else
- frkavec:setEffect("none")
- end
- else
- frkavec:setEffect("invisible")
- end
- switch(frkavec.cinnost){
- [0] = function()
- if random(1000) < 8 then
- frkavec.okno = random(2) + 1
- if room.globpole[frkavec.okno] == 0 then
- frkavec.cinnost = 1
- frkavec.faze = 0
- frkavec.strana = random(2)
- room.globpole[frkavec.okno] = 1
- end
- end
- end,
- [1] = function()
- local anim_table = {
- [0] = function()
- frkavec.afaze = frkavec.faze
- frkavec.faze = frkavec.faze + 1
- end,
- [5] = function()
- frkavec.afaze = 5
- frkavec.delay = random(10) + 5
- frkavec.faze = frkavec.faze + 1
- end,
- [6] = function()
- if frkavec.delay > 0 then
- frkavec.delay = frkavec.delay - 1
- else
- frkavec.afaze = 6
- frkavec.delay = 10
- frkavec.faze = frkavec.faze + 1
- end
- end,
- [7] = function()
- if frkavec.delay > 0 then
- frkavec.delay = frkavec.delay - 1
- else
- frkavec.afaze = 5
- if random(100) < 75 then
- frkavec.delay = 2 + random(10)
- frkavec.faze = 6
- else
- frkavec.faze = frkavec.faze + 1
- end
- end
- end,
- [8] = function()
- frkavec.faze = frkavec.faze + 1
- end,
- [9] = function()
- room.globpole[frkavec.okno] = 0
- frkavec.faze = frkavec.faze + 1
- end,
- [10] = function()
- frkavec.afaze = 14 - frkavec.faze
- frkavec.faze = frkavec.faze + 1
- if frkavec.faze == 15 then
- frkavec.cinnost = 0
- end
- end,
- }
- anim_table[1] = anim_table[0]
- anim_table[2] = anim_table[0]
- anim_table[3] = anim_table[0]
- anim_table[4] = anim_table[0]
- anim_table[11] = anim_table[10]
- anim_table[12] = anim_table[10]
- anim_table[13] = anim_table[10]
- anim_table[14] = anim_table[10]
-
- switch(frkavec.faze)(anim_table)
- end,
- }
-
- frkavec:updateAnim()
- end
- end
-
- -- -------------------------------------------------------------
- local function prog_init_dama()
- local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
-
- dama:setEffect("invisible")
- dama.kdeje = random(3)
- dama.cinnost = 0
-
- return function()
- switch(dama.okno){
- [1] = function()
- setViewShiftX(dama, kabina, 2)
- end,
- [2] = function()
- setViewShiftX(dama, kabina, 8)
- end,
- }
- if dama.cinnost > 0 then
- if dama.strana == 1 then
- dama:setEffect("reverse")
- else
- dama:setEffect("none")
- end
- else
- dama:setEffect("invisible")
- end
- local cinnost_table = {
- [0] = function()
- if random(1000) < 8 then
- switch(dama.kdeje){
- [0] = function()
- dama.okno = 1
- dama.strana = 1
- dama.kdebude = 1
- end,
- [1] = function()
- dama.strana = random(2)
- dama.okno = dama.strana + 1
- dama.kdebude = dama.strana * 2
- end,
- [2] = function()
- dama.okno = 2
- dama.strana = 0
- dama.kdebude = 1
- end,
- }
- if room.globpole[dama.okno] == 0 then
- room.globpole[dama.okno] = 1
- dama.cinnost = random(2) + 1
- dama.faze = 0
- dama.delay = 3
- end
- end
- end,
- [1] = function()
- local anim_table = {
- [20] = function()
- dama.faze = dama.faze + 1
- end,
- [24] = function()
- dama.afaze = 15
- dama.faze = dama.faze + 1
- end,
- [28] = function()
- dama.afaze = 6
- dama.faze = dama.faze + 1
- end,
- [30] = function()
- dama.faze = 7
- end,
- default = function()
- if dama.faze >= 0 and dama.faze <= 14 then
- dama.afaze = dama.faze
- if dama.delay > 0 then
- dama.delay = dama.delay - 1
- else
- dama.delay = 3
- dama.faze = dama.faze + 1
- if dama.faze == 7 and dama.cinnost == 2 then
- dama.faze = 20
- end
- end
- if dama.faze == 15 then
- dama.cinnost = 0
- room.globpole[dama.okno] = 0
- dama.kdeje = dama.kdebude
- end
- end
- end,
- }
-
- anim_table[21] = anim_table[20]
- anim_table[22] = anim_table[20]
- anim_table[23] = anim_table[20]
- anim_table[25] = anim_table[24]
- anim_table[26] = anim_table[24]
- anim_table[27] = anim_table[24]
- anim_table[29] = anim_table[28]
-
- switch(dama.faze)(anim_table)
- end,
- }
-
- cinnost_table[2] = cinnost_table[1]
-
- switch(dama.cinnost)(cinnost_table)
-
- dama:updateAnim()
- end
- end
-
- -- -------------------------------------------------------------
- local function prog_init_kapitan()
- local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
-
- kapitan:setEffect("invisible")
- kapitan.kdeje = random(3)
- kapitan.cinnost = 0
-
- return function()
- switch(kapitan.okno){
- [1] = function()
- setViewShiftX(kapitan, kabina, 2)
- end,
- [2] = function()
- setViewShiftX(kapitan, kabina, 8)
- end,
- }
- if kapitan.cinnost > 0 then
- if kapitan.strana == 0 then
- kapitan:setEffect("reverse")
- else
- kapitan:setEffect("none")
- end
- else
- kapitan:setEffect("invisible")
- end
- local cinnost_table = {
- [0] = function()
- if random(1000) < 8 then
- switch(kapitan.kdeje){
- [0] = function()
- kapitan.okno = 1
- kapitan.strana = 1
- kapitan.kdebude = 1
- end,
- [1] = function()
- kapitan.strana = random(2)
- kapitan.okno = kapitan.strana + 1
- kapitan.kdebude = kapitan.strana * 2
- end,
- [2] = function()
- kapitan.okno = 2
- kapitan.strana = 0
- kapitan.kdebude = 1
- end,
- }
- if room.globpole[kapitan.okno] == 0 then
- room.globpole[kapitan.okno] = 1
- kapitan.cinnost = random(2) + 1
- kapitan.faze = 0
- kapitan.delay = 2
- end
- end
- end,
- [1] = function()
- local anim_table = {
- [20] = function()
- kapitan.afaze = kapitan.faze - 20 + 15
- kapitan.faze = kapitan.faze + 1
- end,
- [24] = function()
- kapitan.afaze = 27 - kapitan.faze + 15
- kapitan.faze = kapitan.faze + 1
- end,
- [28] = function()
- kapitan.faze = 8
- end,
- default = function()
- if kapitan.faze >= 0 and kapitan.faze <= 14 then
- kapitan.afaze = kapitan.faze
- if kapitan.delay > 0 then
- kapitan.delay = kapitan.delay - 1
- else
- kapitan.delay = 2
- kapitan.faze = kapitan.faze + 1
- if kapitan.faze == 8 and kapitan.cinnost == 2 then
- kapitan.faze = 20
- end
- end
- if kapitan.faze == 15 then
- kapitan.cinnost = 0
- room.globpole[kapitan.okno] = 0
- kapitan.kdeje = kapitan.kdebude
- end
- end
- end,
- }
-
- anim_table[21] = anim_table[20]
- anim_table[22] = anim_table[20]
- anim_table[23] = anim_table[20]
- anim_table[25] = anim_table[24]
- anim_table[26] = anim_table[24]
- anim_table[27] = anim_table[24]
-
- switch(kapitan.faze)(anim_table)
- end,
- }
-
- cinnost_table[2] = cinnost_table[1]
-
- switch(kapitan.cinnost)(cinnost_table)
-
- kapitan:updateAnim()
- end
- end
-
- -- -------------------------------------------------------------
- local function prog_init_lodnik()
- local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
-
- lodnik:setEffect("invisible")
- lodnik.kdeje = random(3)
- lodnik.cinnost = 0
-
- return function()
- switch(lodnik.okno){
- [1] = function()
- setViewShiftX(lodnik, kabina, 2)
- end,
- [2] = function()
- setViewShiftX(lodnik, kabina, 8)
- end,
- }
- if lodnik.cinnost > 0 then
- if lodnik.strana == 1 then
- lodnik:setEffect("reverse")
- else
- lodnik:setEffect("none")
- end
- else
- lodnik:setEffect("invisible")
- end
- switch(lodnik.cinnost){
- [0] = function()
- if random(1000) < 8 then
- switch(lodnik.kdeje){
- [0] = function()
- lodnik.okno = 1
- lodnik.strana = 1
- lodnik.kdebude = 1
- end,
- [1] = function()
- lodnik.strana = random(2)
- lodnik.okno = lodnik.strana + 1
- lodnik.kdebude = lodnik.strana * 2
- end,
- [2] = function()
- lodnik.okno = 2
- lodnik.strana = 0
- lodnik.kdebude = 1
- end,
- }
- if room.globpole[lodnik.okno] == 0 then
- room.globpole[lodnik.okno] = 1
- lodnik.cinnost = random(2) + 1
- lodnik.faze = 0
- lodnik.delay = (lodnik.cinnost - 1) * 2
- end
- end
- end,
- [1] = function()
- if lodnik.faze >= 0 and lodnik.faze <= 9 then
- lodnik.afaze = lodnik.faze
- if lodnik.delay > 0 then
- lodnik.delay = lodnik.delay - 1
- else
- lodnik.delay = 1 + (lodnik.cinnost - 1) * 2
- lodnik.faze = lodnik.faze + 1
- end
- if lodnik.faze == 10 then
- lodnik.cinnost = 0
- room.globpole[lodnik.okno] = 0
- lodnik.kdeje = lodnik.kdebude
- end
- end
- end,
- [2] = function()
- if lodnik.faze >= 0 and lodnik.faze <= 12 then
- lodnik.afaze = lodnik.faze + 10
- if lodnik.delay > 0 then
- lodnik.delay = lodnik.delay - 1
- else
- lodnik.delay = 1 + (lodnik.cinnost - 1) * 2
- lodnik.faze = lodnik.faze + 1
- end
- if lodnik.faze == 13 then
- lodnik.cinnost = 0
- room.globpole[lodnik.okno] = 0
- lodnik.kdeje = lodnik.kdebude
- end
- end
- end,
- }
-
- lodnik:updateAnim()
- end
- end
-
- -- -------------------------------------------------------------
- local function prog_init_sklenka()
- local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
-
- for pom1 = 0, 8 do
- room.globpole[1000 + pom1] = 0
- end
-
- return function()
- for pom1, glass in pairs(glasses) do
- pom2 = room.globpole[1000 + pom1]
- if glass.dir ~= dir_no then
- if pom2 == 0 then
- pom2 = 9
- elseif pom2 <= 6 then
- pom2 = pom2 + 6
- end
- end
- if pom2 == 0 then
- glass.afaze = 0
- else
- pom2 = pom2 - 1
- glass.afaze = 2 - math.mod(math.floor(pom2 / 3), 2)
- end
- room.globpole[1000 + pom1] = pom2
- glass:updateAnim()
- end
- end
- end
-
- -- --------------------
- local update_table = {}
- local subinit
- subinit = prog_init_room()
- if subinit then
- table.insert(update_table, subinit)
- end
- subinit = prog_init_frkavec()
- if subinit then
- table.insert(update_table, subinit)
- end
- subinit = prog_init_dama()
- if subinit then
- table.insert(update_table, subinit)
- end
- subinit = prog_init_kapitan()
- if subinit then
- table.insert(update_table, subinit)
- end
- subinit = prog_init_lodnik()
- if subinit then
- table.insert(update_table, subinit)
- end
- subinit = prog_init_sklenka()
- if subinit then
- table.insert(update_table, subinit)
- end
- return update_table
- end
- local update_table = prog_init()
-
-
- -- -----------------------------------------------------------------
- -- Update
- -- -----------------------------------------------------------------
- function prog_update()
- for key, subupdate in pairs(update_table) do
- subupdate()
- end
- end
-
-